﻿using System;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Net.Mail;
using System.Net.Mime;
using System.Text;
using System.Web;
using System.Web.Security;
using Beeldbankmvc.Models;
using Elmah;

namespace Beeldbankmvc.Code
{
    [HandleErrorWithELMAH]
    public class Email
    {
        public static string SMTPHost = ConfigurationManager.AppSettings["SMTPHost"];
        public static string nameSender = ConfigurationManager.AppSettings["nameSender"];
        public static string sendingEmail = ConfigurationManager.AppSettings["sendingEmail"];
        public static string nameMainRecipient = ConfigurationManager.AppSettings["nameMainRecipient"];
        public static string mainRecipientEmail = ConfigurationManager.AppSettings["mainRecipientEmail"];

        /// <summary>
        /// Get mail addresses of all users with role as specified
        /// Create collection to store addresses of these users
        /// </summary>
        public static MailAddressCollection getUsersByRole(string role)
        {
            // Get mail addresses of all users with role as specified
            // Create collection to store addresses of these users
            MailAddressCollection recipientAddresses = new MailAddressCollection();

            // Get all users in role "Administrator"
            string[] admins = Roles.GetUsersInRole(role);

            // Loop through all admin users and add their email address to the collection
            foreach (string userName in admins)
            {
                MembershipUser user = Membership.GetUser(userName);
                if (user != null)
                    recipientAddresses.Add(user.Email);
            }

            return recipientAddresses;
        }

        /// <summary>
        /// Sends an email message to the specified mail addresses, as a BCC message, so that recipients 
        ///  are not able to see who is on the recipients list
        /// </summary>
        /// <param name="subject"></param>
        /// <param name="body"></param>
        /// <param name="BCCAddresses"></param>
        public static void sendBCCEMail(string subject, string body, MailAddressCollection BCCAddresses)
        {
            // Create mail message object
            MailAddress sendingAddress = new MailAddress(sendingEmail, nameSender);
            MailAddress recipientAddress = new MailAddress(mainRecipientEmail, nameMainRecipient);
            MailMessage eMailMessage = new MailMessage(sendingAddress, recipientAddress);
            foreach (MailAddress address in BCCAddresses)
                eMailMessage.Bcc.Add(address);

            StreamReader streamReader = new StreamReader(ConfigurationManager.AppSettings["Template"] + "\\nieuwsbriefTemplate.html");
            string mailText = streamReader.ReadToEnd();
            streamReader.Close();

            mailText = mailText.Replace("[%imageUrl%]", "cid:RijkswaterstaatHeader");
            mailText = mailText.Replace("[%Title%]", "Beeldarchief Rijkswaterstaat");
            mailText = mailText.Replace("[%SubTitle%]", subject);
            mailText = mailText.Replace("[%Bodytext%]", "<p>" + body.Replace("\r\n", "<br />") + "</p>");
            mailText = mailText.Replace("[%hostUrl%]", Beeldbankmvc.Code.Utility.GetSiteRoot());

            AlternateView avHtml = AlternateView.CreateAlternateViewFromString(mailText, null, MediaTypeNames.Text.Html);

            // Now, linking our image as an embedded resource
            LinkedResource RijkswaterstaatHeader = new LinkedResource(ConfigurationManager.AppSettings["Template"] + "\\RWS_HeaderMail.gif", MediaTypeNames.Image.Gif);
            RijkswaterstaatHeader.ContentId = "RijkswaterstaatHeader";

            avHtml.LinkedResources.Add(RijkswaterstaatHeader); // Linking the image

            // For clients that do not support HTML content
            string textBody = body;

            AlternateView avText = AlternateView.CreateAlternateViewFromString(textBody, null, MediaTypeNames.Text.Plain);

            // Add the alternate views
            eMailMessage.AlternateViews.Add(avHtml);
            eMailMessage.AlternateViews.Add(avText);

            // Sending message
            SmtpClient client = new SmtpClient(Email.SMTPHost, 25);

            // our account credentials
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = true;

            // Catching result
            try
            {
                client.Send(eMailMessage);
            }
            catch (SmtpException ex)
            {
                // Log exception
                var context = HttpContext.Current;
                ErrorLog.GetDefault(context).Log(new Error(ex, context));
            }
            catch (Exception ex)
            {
                // Log exception
                var context = HttpContext.Current;
                ErrorLog.GetDefault(context).Log(new Error(ex, context));
            }
        }

        /// <summary>
        /// Sends email to the specified mail address, from the default system's admin email address
        /// </summary>
        /// <param name="subject"></param>
        /// <param name="body"></param>
        /// <param name="recipientAddress"></param>
        public static void sendSystemEMail(string subject, string body, MailAddress recipientAddress, bool sendBCC)
        {
            // Create mail message object
            MailAddress sendingAddress = new MailAddress(sendingEmail, nameSender);
            MailMessage eMailMessage = new MailMessage(sendingAddress, recipientAddress);

            if (sendBCC)
            {
                string recipientEmail = ConfigurationManager.AppSettings["reactionMailToAddress"].ToString();
                string recipientName = ConfigurationManager.AppSettings["reactionMailToName"].ToString();
                MailAddress bccAddress = new MailAddress(recipientEmail, recipientName);

                eMailMessage.Bcc.Add(bccAddress);
            }

            StreamReader streamReader = new StreamReader(ConfigurationManager.AppSettings["Template"] + "\\nieuwsbriefTemplate.html");
            string mailText = streamReader.ReadToEnd();
            streamReader.Close();

            mailText = mailText.Replace("[%imageUrl%]", "cid:RijkswaterstaatHeader");
            mailText = mailText.Replace("[%Title%]", "Beeldarchief Rijkswaterstaat");
            mailText = mailText.Replace("[%SubTitle%]", subject);
            mailText = mailText.Replace("[%Bodytext%]", "<p>" + body.Replace("\r\n", "<br />") + "</p>");
            mailText = mailText.Replace("[%hostUrl%]", Beeldbankmvc.Code.Utility.GetSiteRoot());

            AlternateView avHtml = AlternateView.CreateAlternateViewFromString(mailText, null, MediaTypeNames.Text.Html);

            // Now, linking our image as an embedded resource
            LinkedResource RijkswaterstaatHeader = new LinkedResource(ConfigurationManager.AppSettings["Template"] + "\\RWS_HeaderMail.gif", MediaTypeNames.Image.Gif);
            RijkswaterstaatHeader.ContentId = "RijkswaterstaatHeader";

            avHtml.LinkedResources.Add(RijkswaterstaatHeader); // Linking the image

            // For clients that do not support HTML content
            string textBody = body;

            AlternateView avText = AlternateView.CreateAlternateViewFromString(textBody, null, MediaTypeNames.Text.Plain);

            // Add the alternate views
            eMailMessage.AlternateViews.Add(avHtml);
            eMailMessage.AlternateViews.Add(avText);

            eMailMessage.Subject = subject;

            // Sending message
            SmtpClient client = new SmtpClient(Email.SMTPHost, 25);

            // our account credentials
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = true;

            // Catching result
            try
            {
                client.Send(eMailMessage);
            }
            catch (SmtpException ex)
            {
                // Log exception
                var context = HttpContext.Current;
                ErrorLog.GetDefault(context).Log(new Error(ex, context));
            }
            catch (Exception ex)
            {
                // Log exception
                var context = HttpContext.Current;
                ErrorLog.GetDefault(context).Log(new Error(ex, context));
            }
            finally
            {
                RijkswaterstaatHeader.Dispose();
                streamReader.Dispose();
                avHtml.Dispose();
                avText.Dispose();
            }
        }


        /// <summary>
        /// Sends email to the specified mail address, from the specified mail address
        /// </summary>
        /// <param name="subject"></param>
        /// <param name="body"></param>
        /// <param name="recipientAddress"></param>
        /// <param name="sendingAddress"></param>
        public static void sendEMail(string subject, string body, MailAddress recipientAddress, MailAddress sendingAddress)
        {
            MailMessage eMailMessage = new MailMessage(sendingAddress, recipientAddress);
            eMailMessage.Subject = subject;
            eMailMessage.Body = body;

            // Look for users with role "Administrator" and send each of these users a BCC message
            MailAddressCollection BCCAddresses = getUsersByRole("Administrator");
            foreach (MailAddress address in BCCAddresses)
                eMailMessage.Bcc.Add(address);

            SmtpClient client = new SmtpClient(SMTPHost, 25);
            // Catching result
            try
            {
                client.Send(eMailMessage);
            }
            catch (SmtpException ex)
            {
                // Log exception
                var context = HttpContext.Current;
                ErrorLog.GetDefault(context).Log(new Error(ex, context));
            }
            catch (Exception ex)
            {
                // Log exception
                var context = HttpContext.Current;
                ErrorLog.GetDefault(context).Log(new Error(ex, context));
            }
        }

        private static string mailContent(MembershipUser user, BEELDBANK_ORDER order)
        {
            string retVar = "";

            StringBuilder sb = new StringBuilder();
            sb.AppendLine("Geachte " + order.BEELDBANK_GEBRUIKER.Voornaam + " " + order.BEELDBANK_GEBRUIKER.Tussenvoegsel + " " + order.BEELDBANK_GEBRUIKER.Achternaam + ",");
            sb.AppendLine("");
            sb.AppendLine("Onderstaande bestelling, met nummer " + order.Id + ", is door u geplaatst op het Beeldarchief Rijkswaterstaat. ");
            sb.AppendLine("");
            sb.AppendLine("U wordt vriendelijk verzocht deze gegevens te controleren en deze mail te bewaren voor toekomstige gebruik. Mocht u alsnog fouten vinden wordt u verzocht zo spoedig mogelijk contact op te nemen met de Helpdesk Beeldarchief Rijkswaterstaat. De contactgegevens vindt u onderaan deze email. ");
            sb.AppendLine("");
            sb.AppendLine("Betalingen: ");
            sb.AppendLine("");
            sb.AppendLine("Zodra wij uw opdracht en de betaling binnen hebben, nemen wij uw opdracht in behandeling. ");
            sb.AppendLine("Hierna kunt u met 5 werkdagen uw bestelling tegemoet zien. ");
            sb.AppendLine("Een factuur met BTW opgave in PDF wordt u daarna separaat toegezonden.");
            sb.AppendLine("");
            sb.AppendLine("De betaling voor deze bestelling bedraagt: " + String.Format("{0:0.00}", order.TotaalPrijs) + " euro (inclusief BTW)");
            sb.AppendLine("");
            sb.AppendLine("Betalingen overmaken naar: ");
            sb.AppendLine("Banknummer NL80 INGB 0005 4183 58 ");
            sb.AppendLine("t.n.v. J.G. Boelens ");
            sb.AppendLine("Katwijk aan Zee ");
            sb.AppendLine("");
            sb.AppendLine("Bedrijf           : " + order.BEELDBANK_GEBRUIKER.Bedrijfsnaam);
            sb.AppendLine("Contactpersoon    : " + order.BEELDBANK_GEBRUIKER.Voornaam + " " + order.BEELDBANK_GEBRUIKER.Achternaam);
            sb.AppendLine("Factuuradres      : " + order.BEELDBANK_GEBRUIKER.FactuurAdres + " " + order.BEELDBANK_GEBRUIKER.FactuurHuisnummer);
            sb.AppendLine("Postcode + Plaats : " + order.BEELDBANK_GEBRUIKER.FactuurPostcode + " " + order.BEELDBANK_GEBRUIKER.FactuurWoonplaats + " " + Countries.getCountryNameById(order.BEELDBANK_GEBRUIKER.FactuurLand));
            sb.AppendLine("Afleveradres      : " + order.BEELDBANK_GEBRUIKER.Adres + " " + order.BEELDBANK_GEBRUIKER.Huisnummer);
            sb.AppendLine("Postcode + Plaats : " + order.BEELDBANK_GEBRUIKER.Postcode + " " + order.BEELDBANK_GEBRUIKER.Woonplaats + " " + Countries.getCountryNameById(order.BEELDBANK_GEBRUIKER.Land));
            sb.AppendLine("Telefoon          : " + order.BEELDBANK_GEBRUIKER.Telefoonnummer);
            sb.AppendLine("Email             : " + user.Email);
            sb.AppendLine("");
            sb.AppendLine("Bestelling  : " + order.Id);
            sb.AppendLine("Opdrachtnr  : " + order.OpdrachtNr);
            sb.AppendLine("Gebruik     : " + order.Gebruik);
            sb.AppendLine("Opmerkingen : " + order.Opmerkingen);
            sb.AppendLine("");

            bool doFoto = false;
            bool doVideo = false;
            foreach (var orderRegel in order.BEELDBANK_ORDERREGELs.Where(p => p.MediaTypeId != (int)Mediatypes.MediaTypes.video_animation))
            {
                doFoto = true;
            }
            foreach (var orderRegel in order.BEELDBANK_ORDERREGELs.Where(p => p.MediaTypeId == (int)Mediatypes.MediaTypes.video_animation))
            {
                doVideo = true;
            }

            if (doFoto)
            {
                sb.AppendLine("");
                sb.AppendLine("    ");
                sb.Append("ARCHIEFNUMMER");
                sb.Append("\t MAPNUMMER");
                sb.Append("\t FILENR");
                sb.Append("\t AANTAL");
                sb.Append("\t LEVERGEGEVENS(Code Typenaam Formaat Afwerking)");
                sb.AppendLine("    ");

                // TODO: only pictures, remove map and file number for visitor
                foreach (var orderRegel in order.BEELDBANK_ORDERREGELs.Where(p => p.MediaTypeId != (int)Mediatypes.MediaTypes.video_animation))
                {
                    sb.AppendLine("    ");
                    sb.Append(orderRegel.BEELDBANK_MEDIAOBJECT.Titel);
                    sb.Append("\t\t " + orderRegel.BEELDBANK_MEDIAOBJECT.Mapnummer);
                    sb.Append("\t\t " + orderRegel.BEELDBANK_MEDIAOBJECT.FileNummer);
                    sb.Append("\t\t " + orderRegel.Aantal);
                    sb.Append("\t\t " + orderRegel.Id + " " + orderRegel.Type + " " + orderRegel.Formaat + " " + orderRegel.Afwerking);
                    sb.AppendLine("    ");
                }
                sb.AppendLine("");
                sb.AppendLine("");
            }

            if (doVideo)
            {
                sb.AppendLine("");
                sb.AppendLine("    ");
                sb.Append("COLLECTIE");
                sb.Append("\t MONTAGE");
                sb.Append("\t FILENR");
                sb.Append("\t AANTAL");
                sb.Append("\t LEVERGEGEVENS(Code Typenaam Formaat Afwerking)");
                sb.AppendLine("    ");

                // TODO: only movies, remove map and file number for visitor
                foreach (var orderRegel in order.BEELDBANK_ORDERREGELs.Where(p => p.MediaTypeId == (int)Mediatypes.MediaTypes.video_animation))
                {
                    sb.AppendLine("    ");
                    sb.Append(orderRegel.BEELDBANK_MEDIAOBJECT.Collectie);
                    sb.Append("\t\t " + orderRegel.BEELDBANK_MEDIAOBJECT.Montage);
                    sb.Append("\t\t " + orderRegel.BEELDBANK_MEDIAOBJECT.FileNummer);
                    sb.Append("\t\t " + orderRegel.Aantal);
                    sb.Append("\t\t " + orderRegel.Id + " " + orderRegel.Type + " " + orderRegel.Formaat + " " + orderRegel.Afwerking);
                    sb.AppendLine("    ");
                }
                sb.AppendLine("");
                sb.AppendLine("");
            }

            sb.AppendLine("Voor vragen over bestellingen, levering en facturering van de foto's XI-Digital ");
            sb.AppendLine("Sirius 12, 2221 NC  Katwijk (ZH)");
            sb.AppendLine("Telefoon: 06 - 2097 4022");
            sb.AppendLine("          werkdagen 08.00u - 18.00u ");
            sb.AppendLine("E-mail:   info@xi-digital.nl");
            sb.AppendLine("");
            sb.AppendLine("Met vriendelijke groet,");
            sb.AppendLine("");
            sb.AppendLine("Beeldarchief Rijkswaterstaat");
            sb.AppendLine("");

            retVar = sb.ToString();

            return retVar;
        }

        private static string mailContentHTML(MembershipUser user, BEELDBANK_ORDER order)
        {
            string retVar = "";

            StringBuilder sb = new StringBuilder();
            sb.AppendLine("Geachte " + order.BEELDBANK_GEBRUIKER.Voornaam + " " + order.BEELDBANK_GEBRUIKER.Tussenvoegsel + " " + order.BEELDBANK_GEBRUIKER.Achternaam + ", <br/>");
            sb.AppendLine("<br/>");
            sb.AppendLine("Onderstaande bestelling, met nummer " + order.Id + ", is door u geplaatst op het Beeldarchief Rijkswaterstaat. <br/>");
            sb.AppendLine("<br/>");
            sb.AppendLine("U wordt vriendelijk verzocht deze gegevens te controleren en deze mail te bewaren voor toekomstige gebruik. Mocht u alsnog fouten vinden wordt u verzocht zo spoedig mogelijk contact op te nemen met de Helpdesk Beeldarchief Rijkswaterstaat. De contactgegevens vindt u onderaan deze email. <br/>");
            sb.AppendLine("<br/>");
            sb.AppendLine("Betalingen: <br/>");
            sb.AppendLine("<br/>");
            sb.AppendLine("Zodra wij uw opdracht en de betaling binnen hebben, nemen wij uw opdracht in behandeling. <br/>");
            sb.AppendLine("Hierna kunt u met 5 werkdagen uw bestelling tegemoet zien. <br/>");
            sb.AppendLine("Een factuur met BTW opgave in PDF wordt u daarna separaat toegezonden.<br/>");
            sb.AppendLine("<br/>");
            sb.AppendLine("De betaling voor deze bestelling bedraagt: <strong>" + String.Format("{0:0.00}", order.TotaalPrijs) + " euro</strong> (inclusief BTW)<br/>");
            sb.AppendLine("<br/><strong>");
            sb.AppendLine("Betalingen overmaken naar: <br/>");
            sb.AppendLine("Banknummer NL80 INGB 0005 4183 58 <br/>");
            sb.AppendLine("t.n.v. J.G. Boelens <br/>");
            sb.AppendLine("Katwijk aan Zee <br/></strong>");
            sb.AppendLine("<br/>");
            sb.AppendLine("Bedrijf           : " + order.BEELDBANK_GEBRUIKER.Bedrijfsnaam + "<br/>");
            sb.AppendLine("Contactpersoon    : " + order.BEELDBANK_GEBRUIKER.Voornaam + " " + order.BEELDBANK_GEBRUIKER.Achternaam + "<br/>");
            sb.AppendLine("Factuuradres      : " + order.BEELDBANK_GEBRUIKER.FactuurAdres + " " + order.BEELDBANK_GEBRUIKER.FactuurHuisnummer + "<br/>");
            sb.AppendLine("Postcode + Plaats : " + order.BEELDBANK_GEBRUIKER.FactuurPostcode + " " + order.BEELDBANK_GEBRUIKER.FactuurWoonplaats + " " + Countries.getCountryNameById(order.BEELDBANK_GEBRUIKER.FactuurLand) + "<br/>");
            sb.AppendLine("Afleveradres      : " + order.BEELDBANK_GEBRUIKER.Adres + " " + order.BEELDBANK_GEBRUIKER.Huisnummer + "<br/>");
            sb.AppendLine("Postcode + Plaats : " + order.BEELDBANK_GEBRUIKER.Postcode + " " + order.BEELDBANK_GEBRUIKER.Woonplaats + " " + Countries.getCountryNameById(order.BEELDBANK_GEBRUIKER.Land) + "<br/>");
            sb.AppendLine("Telefoon          : " + order.BEELDBANK_GEBRUIKER.Telefoonnummer + " <br/>");
            sb.AppendLine("Email             : " + user.Email + " <br/>");
            sb.AppendLine("");
            sb.AppendLine("Bestelling  : " + order.Id + " <br/>");
            sb.AppendLine("Opdrachtnr  : " + order.OpdrachtNr + "<br/>");
            sb.AppendLine("Gebruik     : " + order.Gebruik + "<br/>");
            sb.AppendLine("Opmerkingen : " + order.Opmerkingen + "<br/>");
            sb.AppendLine("<br/>");

            bool doFoto = false;
            bool doVideo = false;
            foreach (var orderRegel in order.BEELDBANK_ORDERREGELs.Where(p => p.MediaTypeId != (int)Mediatypes.MediaTypes.video_animation))
            {
                doFoto = true;
            }
            foreach (var orderRegel in order.BEELDBANK_ORDERREGELs.Where(p => p.MediaTypeId == (int)Mediatypes.MediaTypes.video_animation))
            {
                doVideo = true;
            }

            if (doFoto)
            {
                sb.AppendLine("<table>");
                sb.AppendLine("    <tr>");
                sb.AppendLine("        <th style=\"vertical-align: top\">ARCHIEFNUMMER</th>");
                sb.AppendLine("        <th style=\"vertical-align: top\">MAPNUMMER</th>");
                sb.AppendLine("        <th style=\"vertical-align: top\">FILENR</th>");
                sb.AppendLine("        <th style=\"vertical-align: top\">AANTAL</th>");
                sb.AppendLine("        <th style=\"vertical-align: top\">LEVERGEGEVENS(Code Typenaam Formaat Afwerking)</th>");
                sb.AppendLine("    </tr>");

                // TODO: only pictures, remove map and file number for visitor
                foreach (var orderRegel in order.BEELDBANK_ORDERREGELs.Where(p => p.MediaTypeId != (int)Mediatypes.MediaTypes.video_animation))
                {
                    sb.AppendLine("    <tr>");
                    sb.AppendLine("        <td style=\"vertical-align: top\">" + orderRegel.BEELDBANK_MEDIAOBJECT.Titel + "</td>");
                    sb.AppendLine("        <td style=\"vertical-align: top\">" + orderRegel.BEELDBANK_MEDIAOBJECT.Mapnummer + "</td>");
                    sb.AppendLine("        <td style=\"vertical-align: top\">" + orderRegel.BEELDBANK_MEDIAOBJECT.FileNummer + "</td>");
                    sb.AppendLine("        <td style=\"vertical-align: top\">" + orderRegel.Aantal + "</td>");
                    sb.AppendLine("        <td style=\"vertical-align: top\">" + orderRegel.Id + " " + orderRegel.Type + " " + orderRegel.Formaat + " " + orderRegel.Afwerking + "</td>");
                    sb.AppendLine("    </tr>");
                }
                sb.AppendLine("</table>");
                sb.AppendLine("<br/>");
            }

            if (doVideo)
            {
                sb.AppendLine("<table>");
                sb.AppendLine("    <tr>");
                sb.AppendLine("        <th style=\"vertical-align: top\">COLLECTIE</th>");
                sb.AppendLine("        <th style=\"vertical-align: top\">MONTAGE </th>");
                sb.AppendLine("        <th style=\"vertical-align: top\">FILENR</th>");
                sb.AppendLine("        <th style=\"vertical-align: top\">AANTAL</th>");
                sb.AppendLine("        <th style=\"vertical-align: top\">LEVERGEGEVENS(Code Typenaam Formaat Afwerking)</th>");
                sb.AppendLine("    </tr>");

                // TODO: only movies, remove map and file number for visitor
                foreach (var orderRegel in order.BEELDBANK_ORDERREGELs.Where(p => p.MediaTypeId == (int)Mediatypes.MediaTypes.video_animation))
                {
                    sb.AppendLine("    <tr>");
                    sb.AppendLine("        <td style=\"vertical-align: top\">" + orderRegel.BEELDBANK_MEDIAOBJECT.Collectie + "</td>");
                    sb.AppendLine("        <td style=\"vertical-align: top\">" + orderRegel.BEELDBANK_MEDIAOBJECT.Montage + "</td>");
                    sb.AppendLine("        <td style=\"vertical-align: top\">" + orderRegel.BEELDBANK_MEDIAOBJECT.FileNummer + "</td>");
                    sb.AppendLine("        <td style=\"vertical-align: top\">" + orderRegel.Aantal + "</td>");
                    sb.AppendLine("        <td style=\"vertical-align: top\">" + orderRegel.Id + " " + orderRegel.Type + " " + orderRegel.Formaat + " " + orderRegel.Afwerking + "</td>");
                    sb.AppendLine("    </tr>");
                }
                sb.AppendLine("</table>");
                sb.AppendLine("<br/>");
            }

            sb.AppendLine("Voor vragen over bestellingen, levering en facturering van de foto's XI-Digital<br/>");
            sb.AppendLine("Sirius 12, 2221 NC  Katwijk (ZH) <br/>");
            sb.AppendLine("Telefoon: 06 - 2097 4022 <br/>");
            sb.AppendLine("          werkdagen 08.00u - 18.00u <br/>");
            sb.AppendLine("E-mail:   info@xi-digital.nl <br/>");
            sb.AppendLine("<br/>");
            sb.AppendLine("Met vriendelijke groet,<br/> ");
            sb.AppendLine("<br/>");
            sb.AppendLine("Beeldarchief Rijkswaterstaat<br/>");
            sb.AppendLine("<br/>");

            retVar = sb.ToString();

            return retVar;
        }

        public static void mailOrder(MembershipUser user, BEELDBANK_ORDER order)
        {
            // Mail message construction
            MailMessage eMailMessage = new MailMessage(Email.sendingEmail, user.Email);
            eMailMessage.Subject = "Order bevestiging Beeldarchief Rijkswaterstaat";

            // Send silent copy of email to RWS
            eMailMessage.Bcc.Add(Email.mainRecipientEmail);

            // Look for users with role "Administrator" and send each of these users a BCC message
            MailAddressCollection BCCAddresses = getUsersByRole("Administrator");
            foreach (MailAddress address in BCCAddresses)
                eMailMessage.Bcc.Add(address);

            StreamReader streamReader = new StreamReader(ConfigurationManager.AppSettings["Template"] + "\\nieuwsbriefTemplate.html");
            string mailText = streamReader.ReadToEnd();
            streamReader.Close();

            mailText = mailText.Replace("[%imageUrl%]", "cid:RijkswaterstaatHeader");
            mailText = mailText.Replace("[%Title%]", "Beeldarchief Rijkswaterstaat");
            mailText = mailText.Replace("[%SubTitle%]", "Uw bestelling");
            mailText = mailText.Replace("[%Bodytext%]", mailContentHTML(user, order));
            mailText = mailText.Replace("[%hostUrl%]", Beeldbankmvc.Code.Utility.GetSiteRoot());

            AlternateView avHtml = AlternateView.CreateAlternateViewFromString(mailText, null, MediaTypeNames.Text.Html);
            // Now, linking our image as an embedded resource
            LinkedResource RijkswaterstaatHeader = new LinkedResource(ConfigurationManager.AppSettings["Template"] + "\\RWS_HeaderMail.gif", MediaTypeNames.Image.Gif);
            RijkswaterstaatHeader.ContentId = "RijkswaterstaatHeader";
            avHtml.LinkedResources.Add(RijkswaterstaatHeader); // Linking the image
            // Add the alternate view to message
            eMailMessage.AlternateViews.Add(avHtml);

            // For clients that do not support HTML content
            string textBody = mailContent(user, order);
            AlternateView avText = AlternateView.CreateAlternateViewFromString(textBody, null, MediaTypeNames.Text.Plain);
            // Add the alternate view to message
            eMailMessage.AlternateViews.Add(avText);

            // Sending message
            SmtpClient client = new SmtpClient(Email.SMTPHost, 25);

            // our account credentials
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.UseDefaultCredentials = true;

            // Catching result
            try
            {
                client.Send(eMailMessage);
            }
            catch (SmtpException ex)
            {
                // Log exception
                var context = HttpContext.Current;
                ErrorLog.GetDefault(context).Log(new Error(ex, context));
            }
            catch (Exception ex)
            {
                // Log exception
                var context = HttpContext.Current;
                ErrorLog.GetDefault(context).Log(new Error(ex, context));
            }
        }

    }
}
